home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / GameState.py < prev    next >
Encoding:
Python Source  |  2000-11-16  |  46.6 KB  |  1,339 lines

  1.  
  2.  
  3.  
  4. import Bladex
  5. import BBLib
  6. import time
  7. import types
  8. import cPickle
  9. import os
  10. import shutil
  11. import string
  12. import GameStateAux
  13. import ObjStore
  14. import Language
  15.  
  16.  
  17.  
  18.  
  19. NotSave          = []
  20. ModulesToBeSaved = [] 
  21.  
  22. def GetPickFileName(data):
  23.     filename=None
  24.     try:
  25.         filename="%s/%s.dat"%("f",data.persistent_id())
  26.     except:
  27.         if type(data) in (types.DictionaryType,types.ListType,types.TupleType):
  28.             filename="%s/%s%s.dat"%("f",str(type(data)),ObjStore.GetNewId())
  29.         elif type(data) == types.FunctionType:
  30.             filename="%s/%s%s.dat"%("f",data.func_name,ObjStore.GetNewId())
  31.         elif type(data) == types.MethodType:
  32.             filename="%s/%s%s.dat"%("f",data.im_func.func_name,ObjStore.GetNewId())
  33.         else:
  34. ##            filename="%s/%s.dat"%("f",ObjStore.GetNewId())
  35.             filename="%s/%s%s.dat"%("f",str(type(data)),ObjStore.GetNewId())
  36.  
  37.     return filename
  38.  
  39.  
  40.  
  41. def SavePickDataAux(file,aux_dir,data,assign):
  42. ##    if type(data)==types.MethodType:
  43. ##        print "SavePickDataAux() -> Warning: omiting method."
  44. ##        return
  45.  
  46.     if(data):
  47.         filename=GetPickFileName(data)
  48.         restorestring='GameStateAux.GetPickledData("%s")'%(filename,)
  49.         file.write(assign%(restorestring,))
  50.  
  51.         GameStateAux.SavePickData(filename,data)
  52.  
  53.  
  54. ## Aproximadamente 2.5 segundos sobre 87, Se puede optimizar pasandolo a binario?
  55. def SavePickledObjects(file,aux_dir):
  56.  
  57.     filename="%s/%s.dat"%(aux_dir,"DinObjs")
  58.  
  59.     ObjStore.CheckStore()
  60.  
  61.     funcfile=open(filename,"wt")
  62.     p=cPickle.Pickler(funcfile)
  63.     p.dump(ObjStore.ObjectsStore)
  64.     funcfile.close()
  65.  
  66.     file.write('GameStateAux.GetPickledObjects("%s")\n'%(filename,))
  67.  
  68.  
  69.  
  70.  
  71. class EntityState:
  72.     def __init__(self,entity):
  73.         self.CreationProps={}
  74.         self.SpecialProps={}
  75.  
  76.         self.CreationProps["Name"]=entity.Name
  77.         self.CreationProps["Kind"]=entity.Kind
  78.         self.CreationProps["Position"]=entity.Position
  79.  
  80. ##        self.SpecialProps["InternalState"]=entity.InternalState
  81.         if entity.Data:
  82.             self.SpecialProps["Data"]=entity.Data
  83.         if entity.FrameFunc:
  84.             self.SpecialProps["FrameFunc"]=entity.FrameFunc
  85.         if entity.HitFunc:
  86.             self.SpecialProps["HitFunc"]=entity.HitFunc
  87.         if entity.InflictHitFunc:
  88.             self.SpecialProps["InflictHitFunc"]=entity.InflictHitFunc
  89.         if entity.DamageFunc:
  90.             self.SpecialProps["DamageFunc"]=entity.DamageFunc
  91.         if entity.TimerFunc:
  92.             self.SpecialProps["TimerFunc"]=entity.TimerFunc
  93.         if entity.HearFunc:
  94.             self.SpecialProps["HearFunc"]=entity.HearFunc
  95.         if entity.UseFunc:
  96.             self.SpecialProps["UseFunc"]=entity.UseFunc
  97.         if entity.SeeFunc:
  98.             self.SpecialProps["SeeFunc"]=entity.SeeFunc
  99.         if entity.StickFunc:
  100.             self.SpecialProps["StickFunc"]=entity.StickFunc
  101.         #self.SpecialProps["ChangeNodeFunc"]=entity.ChangeNodeFunc
  102.  
  103.         # Esta la trato como caso especial.
  104.         self.InWorld=entity.InWorld
  105.  
  106.     def SaveCreation(self,file,aux_dir):
  107.         file.write('\n\n\n')
  108.         file.write('o=Bladex.CreateEntity("%s","%s",%f,%f,%f)\n' %
  109.                     (self.CreationProps["Name"],
  110.                      self.CreationProps["Kind"],
  111.                      self.CreationProps["Position"][0],
  112.                      self.CreationProps["Position"][1],
  113.                      self.CreationProps["Position"][2]
  114.                     )
  115.                   )
  116.  
  117.  
  118.  
  119.  
  120.     def SaveSpecialProperties(self,file,aux_dir):
  121.         name=self.CreationProps["Name"]
  122.  
  123.         for i in self.SpecialProps.keys():
  124.             curr_func=self.SpecialProps[i]
  125.             f_rest_string="o.%s="%(i)
  126.             SavePickDataAux(file,aux_dir,curr_func,f_rest_string+'%s\n')
  127.  
  128.  
  129.  
  130.     def SaveStatePass2(self,file,aux_dir):
  131.  
  132.         if self.SpecialProps.keys():
  133.             file.write('o=Bladex.GetEntity("%s")\n'%(self.CreationProps["Name"]))
  134.             self.SaveSpecialProperties(file,aux_dir)
  135.             file.write('\n\n')
  136. ##        if save or self.SpecialProps["Data"]:
  137. ##            file.write('o=Bladex.GetEntity("%s")\n'%(self.CreationProps["Name"]))
  138. ##            self.SaveSpecialProperties(file,aux_dir)
  139. ##            data=self.SpecialProps["Data"]
  140. ##            SavePickDataAux(file,aux_dir,data,'o.Data=%s\n\n\n\n')
  141.  
  142.  
  143. class EntitySpotState(EntityState):
  144.     def __init__(self,entity):
  145.         EntityState.__init__(self,entity)
  146.  
  147.  
  148.  
  149. class EntityObjectState(EntityState):
  150.     def __init__(self,entity):
  151.         EntityState.__init__(self,entity)
  152.  
  153.  
  154.  
  155. class EntityPhysicState(EntityObjectState):
  156.     def __init__(self,entity):
  157.         EntityObjectState.__init__(self,entity)
  158.         if entity.OnStopFunc:
  159.             self.SpecialProps["OnStopFunc"]=entity.OnStopFunc
  160.  
  161.  
  162.  
  163.  
  164. class EntityWeaponState(EntityPhysicState):
  165.     def __init__(self,entity):
  166.         EntityPhysicState.__init__(self,entity)
  167.         if entity.HitShieldFunc:
  168.             self.SpecialProps["HitShieldFunc"]=entity.HitShieldFunc
  169.  
  170.  
  171.  
  172. class EntityActorState(EntityObjectState):
  173.     def __init__(self,entity):
  174.         EntityObjectState.__init__(self,entity)
  175.  
  176.  
  177.  
  178. class EntityArrowState(EntityWeaponState):
  179.     def __init__(self,entity):
  180.         EntityWeaponState.__init__(self,entity)
  181.  
  182.  
  183.  
  184. class EntityParticleSystemState(EntityState):
  185.     def __init__(self,entity):
  186.         EntityState.__init__(self,entity)
  187.  
  188.  
  189.  
  190. class EntityFireState(EntityState):
  191.     def __init__(self,entity):
  192.         EntityState.__init__(self,entity)
  193.  
  194.  
  195.  
  196.  
  197.  
  198. class EntityCameraState(EntityState):
  199.     def __init__(self,entity):
  200.         EntityState.__init__(self,entity)
  201.  
  202.  
  203.  
  204.  
  205. class EntityAuraState(EntityState):
  206.     def __init__(self,entity):
  207.         EntityState.__init__(self,entity)
  208.  
  209.  
  210.  
  211.  
  212. class EntitySlidingAreaState(EntityState):
  213.     def __init__(self,entity):
  214.         EntityState.__init__(self,entity)
  215.         self.Displacement=entity.Displacement 
  216.         self.SpecialProps["OnStopFunc"]=entity.OnStopFunc
  217.  
  218.         self.Limit = entity.DisplacementLimit
  219.         self.V_D = entity.V_D
  220.         self.A_D = entity.A_D
  221.         self.IsStopped = entity.IsStopped
  222.  
  223.     def SaveProperties(self,file,aux_dir):        
  224.         EntityState.SaveProperties(self,file,aux_dir)
  225.         file.write('o.Displacement=%s\n'%( str(self.Displacement)))
  226.  
  227.     def SaveSpecialProperties(self,file,aux_dir):
  228.         EntityState.SaveSpecialProperties(self,file,aux_dir)
  229.         SavePickDataAux(file,aux_dir,self.SpecialProps["OnStopFunc"],'o.OnStopFunc=%s\n')
  230.         #if not self.IsStopped:
  231.         #    file.write('o.SlideTo(%s,%s,%s)\n'%( str(self.Limit),str(self.V_D),str(self.A_D)))
  232.  
  233.  
  234. class EntityWaterState(EntityState):
  235.     def __init__(self,entity):
  236.         EntityState.__init__(self,entity)
  237.         if entity.TouchFluidFunc:
  238.             self.SpecialProps["TouchFluidFunc"]=entity.TouchFluidFunc
  239.  
  240.  
  241.  
  242.  
  243. class EntitySoundState(EntityState):
  244.     def __init__(self,entity):
  245.         EntityState.__init__(self,entity)
  246.  
  247.  
  248.  
  249.  
  250. class EntityMagicMissileState(EntityState):
  251.     def __init__(self,entity):
  252.         EntityState.__init__(self,entity)
  253.  
  254.  
  255.  
  256.  
  257. class EntityElectricBoltState(EntityState):
  258.     def __init__(self,entity):
  259.         EntityState.__init__(self,entity)
  260.  
  261.  
  262.  
  263.  
  264. class EntityPoolState(EntityState):
  265.     def __init__(self,entity):
  266.         EntityState.__init__(self,entity)
  267.  
  268.  
  269.  
  270.  
  271. class EntityParticleState(EntityState):
  272.     def __init__(self,entity):
  273.         EntityState.__init__(self,entity)
  274.  
  275.  
  276.  
  277.  
  278. class EntityDecalState(EntityState):
  279.     def __init__(self,entity):
  280.         EntityState.__init__(self,entity)
  281.  
  282.  
  283.  
  284. class EntityLavaState(EntityState):
  285.     def __init__(self,entity):
  286.         EntityState.__init__(self,entity)
  287.         if entity.TouchFluidFunc:
  288.             self.SpecialProps["TouchFluidFunc"]=entity.TouchFluidFunc
  289.  
  290.  
  291.  
  292.  
  293. class EntityBipedState(EntityState):
  294.     def __init__(self,entity):
  295.         EntityState.__init__(self,entity)
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302. class EntityPersonState(EntityBipedState):
  303.     def __init__(self,entity):
  304.         EntityBipedState.__init__(self,entity)
  305.         self.SpecialProps["EnterPrimaryAAFunc"]=entity.EnterPrimaryAAFunc
  306.         self.SpecialProps["EnterSecondaryAAFunc"]=entity.EnterSecondaryAAFunc
  307.         self.SpecialProps["EnterCloseFunc"]=entity.EnterCloseFunc
  308.         self.SpecialProps["EnterLargeFunc"]=entity.EnterLargeFunc
  309.         self.SpecialProps["AnmEndedFunc"]=entity.AnmEndedFunc
  310.         self.SpecialProps["DelayNoSeenFunc"]=entity.DelayNoSeenFunc
  311.         self.SpecialProps["RouteEndedFunc"]=entity.RouteEndedFunc
  312.         self.SpecialProps["ImHurtFunc"]=entity.ImHurtFunc
  313.         self.SpecialProps["ImDeadFunc"]=entity.ImDeadFunc
  314.         self.SpecialProps["EnemyDeadFunc"]=entity.EnemyDeadFunc
  315.         self.SpecialProps["NoAllowedAreaFunc"]=entity.NoAllowedAreaFunc
  316.         self.SpecialProps["EnemyNoAllowedAreaFunc"]=entity.EnemyNoAllowedAreaFunc
  317.         self.SpecialProps["CharSeeingEnemyFunc"]=entity.CharSeeingEnemyFunc
  318.         self.SpecialProps["AnmTranFunc"]=entity.AnmTranFunc
  319.         self.SpecialProps["TakeFunc"]=entity.TakeFunc
  320.         self.SpecialProps["ThrowFunc"]=entity.ThrowFunc
  321.         self.SpecialProps["MutilateFunc"]=entity.MutilateFunc
  322.         self.SpecialProps["CombatDistFlag"]=entity.CombatDistFlag
  323.  
  324.  
  325.         self.InitInventory(entity)
  326.  
  327.  
  328.     def SaveSpecialProperties(self,file,aux_dir):
  329.         pass
  330.  
  331.  
  332.     def InitInventory(self,entity):
  333.         import Actions
  334.         inv=entity.GetInventory()
  335.         self.Inventory={}
  336.         self.Inventory["Objects"]=[]
  337.         for i in range(inv.nKindObjects):
  338.             for name in Actions.GetListOfObjectsAt(inv,i):
  339.                 self.Inventory["Objects"].append(name)
  340.  
  341.         self.Inventory["Weapons"]=[]
  342.         for i in range(inv.nWeapons):
  343.             self.Inventory["Weapons"].append(inv.GetWeapon(i))
  344.  
  345.         self.Inventory["Shields"]=[]
  346.         for i in range(inv.nShields):
  347.             self.Inventory["Shields"].append(inv.GetShield(i))
  348.  
  349.         self.Inventory["Quivers"]=[]
  350.         for i in range(inv.nQuivers):
  351.             self.Inventory["Quivers"].append(inv.GetQuiver(i))
  352.  
  353.         self.Inventory["Keys"]=[]
  354.         for i in range(inv.nKeys):
  355.             self.Inventory["Keys"].append(inv.GetKey(i))
  356.  
  357.         self.Inventory["SpecialKeys"]=[]
  358.         for i in range(inv.nSpecialKeys):
  359.             self.Inventory["SpecialKeys"].append(inv.GetSpecialKey(i))
  360.  
  361.         self.Inventory["Tablets"]=[]
  362.         for i in range(inv.nTablets):
  363.             self.Inventory["Tablets"].append(inv.GetTablet(i))
  364.  
  365.         self.Inventory["InvLeft"]=entity.InvLeft
  366.         self.Inventory["InvLeft2"]=entity.InvLeft2
  367.         self.Inventory["InvRight"]=entity.InvRight
  368.         self.Inventory["InvLeftBack"]=entity.InvLeftBack
  369.         self.Inventory["InvRightBack"]=entity.InvRightBack
  370.  
  371.  
  372.  
  373.     def SaveStatePass2(self,file,aux_dir):
  374.         #print "begin PersonEntity.SaveStatePass2() "
  375.         #EntityBipedState.SaveStatePass2(self,file,aux_dir)
  376.  
  377.         file.write('\no=Bladex.GetEntity("%s")\n'%(self.CreationProps["Name"]))
  378.  
  379.         if self.SpecialProps.has_key("Data"):
  380.             data=self.SpecialProps["Data"]
  381.             SavePickDataAux(file,aux_dir,data,'o.Data=%s\n')
  382.  
  383.         file.write('inv=o.GetInventory()\n')
  384.         for i in self.Inventory["Objects"]:
  385.             #inv.AddObject(i)
  386.             file.write('Actions.ExtendedTakeObject(inv,"%s")\n'%(i,))
  387.  
  388.         for i in self.Inventory["Weapons"]:
  389.             file.write('GameStateAux.AddWeaponToInventory(inv,"%s")\n'%(i,))
  390.  
  391.         for i in self.Inventory["Shields"]:
  392.             #inv.AddShield(i)
  393.             #Breakings.SetBreakableWS(i)
  394.             file.write('inv.AddShield("%s")\n'%(i,))
  395.             real_ent=Bladex.GetEntity(i)
  396.             try:
  397.                 a=real_ent.Data.brkobjdata
  398.                 file.write('Breakings.SetBreakableWS("%s")\n'%(i,))
  399.             except Exception,exc:
  400.                 print "Exception in SaveStatePass2",exc
  401.  
  402.         for i in self.Inventory["Quivers"]:
  403.             file.write('GameStateAux.AddQuiverToInventory(inv,"%s")\n'%(i,))
  404.  
  405.         for i in self.Inventory["Keys"]:
  406.             file.write('inv.AddKey("%s")\n'%(i,))
  407.  
  408.         for i in self.Inventory["SpecialKeys"]:
  409.             file.write('inv.AddSpecialKey("%s")\n'%(i,))
  410.  
  411.         for i in self.Inventory["Tablets"]:
  412.             file.write('inv.AddTablet("%s")\n'%(i,))
  413.  
  414.  
  415.         if self.Inventory["InvLeft"]:
  416.             file.write('GameStateAux.LinkLeft("%s",inv,o)\n'%(self.Inventory["InvLeft"],))
  417.             # SetBreakable?
  418.  
  419.         if self.Inventory["InvLeft2"]:
  420.             file.write('GameStateAux.LinkLeft2B("%s",inv,o)\n'%(self.Inventory["InvLeft2"],))
  421.             # SetBreakable?
  422.  
  423.         if self.Inventory["InvRight"]:
  424.             file.write('GameStateAux.LinkRight("%s",inv,o)\n'%(self.Inventory["InvRight"],))
  425.             # SetBreakable?
  426.  
  427.         if self.Inventory["InvRightBack"]:
  428.             file.write('GameStateAux.LinkBack("%s",inv,o)\n'%(self.Inventory["InvRightBack"],))
  429.             # SetBreakable?
  430.  
  431.         if self.Inventory["InvLeftBack"]:
  432.             file.write('GameStateAux.LinkBack("%s",inv,o)\n'%(self.Inventory["InvLeftBack"],))
  433.             # SetBreakable?
  434.             
  435.         #print "end PersonEntity.SaveStatePass2() "
  436.  
  437.  
  438.  
  439.  
  440. v__entities_saved=0
  441.  
  442. class EntitiesStateAux:
  443.     def __init__(self,EntClass):
  444.         self.EntClass=EntClass
  445.         self.Entities=[]
  446.  
  447.     def AddEntityState(self,entity):
  448.         self.Entities.append(self.EntClass(entity))
  449.  
  450.     def SaveStates(self,file,aux_dir):
  451.         file.write('# There are %d entities\n\n'%(len(self.Entities),))
  452.         for i in self.Entities:
  453.             i.SaveState(file,aux_dir)
  454.  
  455.     def SaveStatesPass2(self,file,aux_dir):
  456.         for i in self.Entities:
  457.             global v__entities_saved
  458.             v__entities_saved=v__entities_saved+1
  459.             if not v__entities_saved%5:
  460.                 file.write('__load_bar.Increment("Entity")\n')
  461.             i.SaveStatePass2(file,aux_dir)
  462.  
  463.     def DestroyEntities(self):
  464.         for i in self.Entities:
  465.             if i.CreationProps["Name"]!="Camera":
  466.                 realent=Bladex.GetEntity(i.CreationProps["Name"])
  467.                 realent.SubscribeToList("Pin")
  468.         self.Entities=[]
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476. class EntitiesState:
  477.     def __init__(self):
  478.         self.State={}
  479.         #self.State["Entity"]=EntitiesStateAux(EntityState)
  480.         self.State["Entity Object"]=EntitiesStateAux(EntityObjectState)
  481.         self.State["Entity PhysicObject"]=EntitiesStateAux(EntityPhysicState)
  482.         self.State["Entity Weapon"]=EntitiesStateAux(EntityWeaponState)
  483.         self.State["Entity Arrow"]=EntitiesStateAux(EntityArrowState)
  484.         self.State["Entity Actor"]=EntitiesStateAux(EntityActorState)
  485.         self.State["Entity Biped"]=EntitiesStateAux(EntityBipedState)
  486.         self.State["Entity Person"]=EntitiesStateAux(EntityPersonState)
  487.         self.State["Entity Spot"]=EntitiesStateAux(EntitySpotState)
  488.         self.State["Entity PrtclSys"]=EntitiesStateAux(EntityParticleSystemState)
  489.         self.State["Entity Particle System D1"]=EntitiesStateAux(EntityParticleSystemState)
  490.         self.State["Entity Particle System D2"]=EntitiesStateAux(EntityParticleSystemState)
  491.         self.State["Entity Particle System D3"]=EntitiesStateAux(EntityParticleSystemState)
  492.         self.State["Entity Particle System Dobj"]=EntitiesStateAux(EntityParticleSystemState)
  493.         self.State["Entity Particle System Dperson"]=EntitiesStateAux(EntityParticleSystemState)
  494.         self.State["Entity Fire"]=EntitiesStateAux(EntityFireState)
  495.         #self.State["Entity Dynamic Fire"]=EntitiesStateAux(EntityDynamicFireState)
  496.         self.State["Entity Camera"]=EntitiesStateAux(EntityCameraState)
  497.         self.State["Entity Water"]=EntitiesStateAux(EntityWaterState)
  498.         #self.State["Entity Trail"]=EntitiesStateAux(EntityTrailState)
  499.         self.State["Entity Sound"]=EntitiesStateAux(EntitySoundState)
  500.         self.State["Entity Magic Missile"]=EntitiesStateAux(EntityMagicMissileState)
  501.         self.State["Entity ElectricBolt"]=EntitiesStateAux(EntityElectricBoltState)
  502.         self.State["Entity Pool"]=EntitiesStateAux(EntityPoolState)
  503.         self.State["Entity Particle"]=EntitiesStateAux(EntityParticleState)
  504.         self.State["Entity Decal"]=EntitiesStateAux(EntityDecalState)
  505.         self.State["Entity Lava"]=EntitiesStateAux(EntityLavaState)
  506.         self.State["Entity Sliding Area"]=EntitiesStateAux(EntitySlidingAreaState)
  507.         #self.State["Sparks"]=EntitiesStateAux(EntityObjectState)
  508.         #self.State["Clients"]=EntitiesStateAux(EntityObjectState)
  509.         self.State["Entity Aura"]=EntitiesStateAux(EntityAuraState)
  510.  
  511.     def GetState(self):
  512.         for i in range(Bladex.nEntities()):
  513.             entity=Bladex.GetEntity(i)
  514.             kind=entity.Kind
  515.             state=None
  516.  
  517.             if kind in self.State.keys():
  518.                 self.State[kind].AddEntityState(entity)
  519.             else: # Estamos con una entidad con BOD
  520.                 if entity.Object:
  521.                     self.State["Entity Object"].AddEntityState(entity)
  522.                 elif entity.Person:
  523.                     self.State["Entity Person"].AddEntityState(entity)
  524.                 elif entity.Weapon:
  525.                     self.State["Entity Weapon"].AddEntityState(entity)
  526.                 elif entity.Arrow:
  527.                     self.State["Entity Arrow"].AddEntityState(entity)
  528.                 elif entity.Physic:
  529.                     self.State["Entity PhysicObject"].AddEntityState(entity)
  530. ##                elif entity.Actor:
  531. ##                    self.State["Entity Actor"].AddEntityState(entity)
  532.  
  533.  
  534.  
  535.     def SaveStatePass2(self,file,aux_dir):
  536.         for i in self.State.keys():
  537.             if i not in NotSave:
  538.                 self.State[i].SaveStatesPass2(file,aux_dir)
  539.             file.write('\n\n')
  540.  
  541.  
  542.     def DestroyEntities(self):
  543.         for i in self.State.keys():
  544.             if i not in NotSave:
  545.                 self.State[i].DestroyEntities()
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552. def CreateEntAux(obj_tuple,obj_kind):
  553.     obj=Bladex.GetEntity(obj_tuple[0])
  554.     if not obj:
  555.         BBLib.ReadBOD(obj_tuple[2])
  556.         obj=Bladex.CreateEntity(obj_tuple[0],obj_tuple[1],0,0,0,obj_kind)
  557.     return obj
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569. class SectorState:
  570.     def __init__(self):
  571.         self.Index=-1
  572.         self.OnEnter=None
  573.         self.OnLeave=None
  574.         self.OnHit=None
  575.         self.OnWalkOn=None
  576.         self.OnWalkOut=None
  577.         self.Active=None
  578.         self.ActiveSurface=None
  579.         self.Save=0
  580.         self.BreakInfo=None
  581.  
  582.     def GetState(self,idx):
  583.         import Sparks # Por GenericSectorOnHit
  584.  
  585.         s=Bladex.GetSector(idx)
  586.         if s:
  587.             self.Index=s.Index
  588.             self.OnEnter=s.OnEnter
  589.             self.OnLeave=s.OnLeave
  590. ##            self.OnHit=s.OnHit
  591.             self.OnWalkOn=s.OnWalkOn
  592.             self.OnWalkOut=s.OnWalkOut
  593.             self.Active=s.Active
  594.             self.ActiveSurface=s.ActiveSurface
  595.             self.BreakInfo=s.BreakInfo
  596.             if (Sparks.GenericSectorOnHit!=s.OnHit and s.OnHit!=None):
  597.                 self.OnHit=s.OnHit
  598.             if s.Active!=1 or s.BreakInfo or s.OnEnter or s.OnLeave or s.OnWalkOn or s.OnWalkOut or self.OnHit:
  599.                 self.Save=1
  600.  
  601.     def SaveState(self,file,aux_dir):
  602.         import Sparks # Por GenericSectorOnHit
  603.  
  604.         if(self.Save):
  605.             file.write('s=Bladex.GetSector(%d)\n'%(self.Index))
  606.             self.__SaveCallbackFunction(file,"OnEnter",aux_dir,self.OnEnter)
  607.             self.__SaveCallbackFunction(file,"OnLeave",aux_dir,self.OnLeave)
  608.             self.__SaveCallbackFunction(file,"OnHit",aux_dir,self.OnHit)
  609.             self.__SaveCallbackFunction(file,"OnWalkOn",aux_dir,self.OnWalkOn)
  610.             self.__SaveCallbackFunction(file,"OnWalkOut",aux_dir,self.OnWalkOut)
  611.             file.write('s.Active=%d\n'%(self.Active))
  612.             if self.BreakInfo:
  613.                 file.write('s.BreakInfo=%s\n'%(str(self.BreakInfo)))
  614. ##            file.write('s.ActiveSurface=%d'%(self.ActiveSurface))
  615.             file.write('\n\n')
  616.  
  617.  
  618.     def __SaveCallbackFunction(self,file,cbname,aux_dir,function):
  619.         r_cb_str='s.%s='%(cbname,)
  620.         SavePickDataAux(file,aux_dir,function,r_cb_str+'%s\n')
  621.  
  622.  
  623. class MapState:
  624.     def __init__(self):
  625.         self.SectorsState=[]
  626.  
  627.     def GetState(self):
  628.         nSectors=Bladex.nSectors()
  629.         for i in range(nSectors):
  630.             s=SectorState()
  631.             s.GetState(i)
  632.             if s.Save:
  633.                 self.SectorsState.append(s)
  634.  
  635.     def SaveState(self,file,aux_dir):
  636.         for i in self.SectorsState:
  637.             i.SaveState(file,aux_dir)
  638.  
  639.  
  640. class TriggerSectorState:
  641.     def __init__(self):
  642.         self.Index=-1
  643.         self.OnEnter=None
  644.         self.OnLeave=None
  645.         self.Data=None
  646.         self.Name=None
  647.         self.Grupo= None
  648.         self.Points = []
  649.         self.FloorHeight = 0
  650.         self.RoofHeight = 0
  651.  
  652.     def GetState(self,idx):
  653.         self.Name=Bladex.GetTriggerSectorName(idx)
  654.         self.Index=idx
  655.         self.OnEnter=Bladex.GetTriggerSectorFunc(self.Name,"OnEnter")
  656.         self.OnLeave=Bladex.GetTriggerSectorFunc(self.Name,"OnLeave")
  657.         self.Data=Bladex.GetTriggerSectorData(self.Name)
  658.         self.Grupo= Bladex.GetTriggerSectorGroup(self.Name)
  659.         self.Points = Bladex.GetTriggerSectorPoints(self.Name)
  660.         self.FloorHeight =Bladex.GetTriggerSectorFloorHeight(self.Name)
  661.         self.RoofHeight = Bladex.GetTriggerSectorRoofHeight(self.Name)
  662.  
  663.     def SaveState(self,file,aux_dir):
  664.         file.write('Bladex.AddTriggerSector("%s","%s",%f,%f,%s)\n'%(self.Name,self.Grupo,self.FloorHeight,self.RoofHeight,self.Points))
  665.         SavePickDataAux(file,aux_dir,self.OnEnter,'Bladex.SetTriggerSectorFunc("'+self.Name+'","OnEnter",%s)\n')
  666.         SavePickDataAux(file,aux_dir,self.OnLeave,'Bladex.SetTriggerSectorFunc("'+self.Name+'","OnLeave",%s)\n')
  667.         SavePickDataAux(file,aux_dir,self.Data,'Bladex.SetTriggerSectorData("'+self.Name+'",%s)\n')
  668.         file.write('\n\n')
  669.  
  670.  
  671.  
  672. class TriggersState:
  673.     def __init__(self):
  674.         self.SectorsState=[]
  675.  
  676.     def GetState(self):
  677.         nSectors=Bladex.nTriggerSectors()
  678.         for i in range(nSectors):
  679.             s=TriggerSectorState()
  680.             s.GetState(i)
  681.             self.SectorsState.append(s)
  682.  
  683.     def SaveState(self,file,aux_dir):
  684.         for i in self.SectorsState:
  685.             i.SaveState(file,aux_dir)
  686.  
  687.  
  688.  
  689. class WorldState:
  690.     def __init__(self):
  691.         self.EntitiesState=EntitiesState()
  692.         self.MapState=MapState()
  693.         self.TriggersState=TriggersState()
  694.         #print "__name__",__name__
  695.  
  696.     def GetState(self):
  697.         self.EntitiesState.GetState()
  698.         self.MapState.GetState()
  699.  
  700.     def SaveState(self,filename):
  701.         import os
  702.         aux_dir=(os.path.splitext(filename)[0])+"_files"
  703.         if os.path.exists(aux_dir):
  704.             shutil.rmtree(aux_dir)
  705.         try:
  706.             os.mkdir(aux_dir)
  707.         except:
  708.             pass
  709.  
  710.         import LoadBar
  711.         load_bar=LoadBar.AutoProgressBar(26,"Saving ","../../Data/Menu/Save/"+Language.Current+"/Guardando.jpg")
  712.         load_bar.Increment("AutoBODs")
  713.         self.SaveAutoBODs(aux_dir)
  714. ##        self.SaveFunctions(aux_dir)
  715.  
  716.         file_data_aux=open("%s/%saux"%(aux_dir,"aux"),"wt")
  717.         file_data_aux.write(Bladex.GetCurrentMap())
  718.         file_data_aux.close()
  719.  
  720.         # Ahora genero el script que al ejecutarse regenera el mundo
  721.         file=open(filename,"wt")
  722.         file.write('############################################################\n')
  723.         file.write('#   Blade Game State %s\n'%(filename,))
  724.         file.write('#   Do not modify\n')
  725.         file.write('#   File created %s \n'%(time.asctime(time.gmtime(time.time())),))
  726.         file.write('############################################################\n\n\n\n')
  727.         file.write('import Bladex\n')
  728.         file.write('Bladex.SetTime(%f)\n'%(Bladex.GetTime(),))
  729.         file.write('import BBLib\n')
  730.         file.write('import cPickle\n')
  731.         file.write('import GameStateAux\n')
  732.         file.write('import Reference\n')
  733.         file.write('import Breakings\n')
  734.         file.write('import Sounds\n')
  735.         file.write('import Actions\n')
  736.         file.write('import os\n')
  737.         file.write('import sys\n')
  738.         file.write('import darfuncs\n\n\n\n')
  739.         file.write('import LoadBar\n\n\n\n')
  740.         file.write('############################################################\n')
  741.         file.write('#\n\n\n')
  742.  
  743.         file.write('Bladex.KillMusic()\n')
  744.         file.write('Bladex.ShutDownSoundChannels()\n')
  745.         file.write('Bladex.PauseSoundSystem()\n')
  746.  
  747.         file.write('Bladex.BeginLoadGame()\n')
  748.         file.write('__load_bar=LoadBar.AutoProgressBar(%d,"Loading ","%s")\n'%(Bladex.nEntities()/5,"../../Data/Menu/Save/"+Language.Current+"/Cargando.jpg"))
  749.         file.write('GameStateAux.aux_dir="%s"\n'%(aux_dir,))
  750.  
  751.         file.write('InNewMap=0\n')
  752.         file.write('if Bladex.GetCurrentMap()!="%s":\n'%(Bladex.GetCurrentMap(),))
  753.         file.write('  InNewMap=1\n')
  754. ##        file.write('InNewMap=1\n')
  755.  
  756.         file.write('print "InNewMap",InNewMap\n')
  757.  
  758.         file.write('Bladex.SetCurrentMap(\"%s\")\n'%(Bladex.GetCurrentMap(),))
  759.         file.write('sys.path.insert(0,os.getcwd())\n')
  760.         file.write('Bladex.SetSaveInfo(%s)\n'%(str(Bladex.GetSaveInfo(),)))
  761.  
  762.         load_bar.Increment("MMPs")
  763.         ResFiles=self.GetMMPFiles()
  764.         file.write('__load_bar.Increment("MMPs")\n')
  765.         file.write('GameStateAux.LoadMMPs(%s)\n'%(str(ResFiles),))
  766.         file.write('__load_bar.Increment()\n')
  767.  
  768.         load_bar.Increment("BMPs")
  769.         ResFiles=self.GetBMPFiles()
  770.         file.write('__load_bar.Increment("BMPs")\n')
  771.         self.SaveList('GameStateAux.LoadBMPs(%s)\n',ResFiles,file)
  772.         file.write('__load_bar.Increment()\n')
  773.  
  774.  
  775.         load_bar.Increment("AlphaBMPs")
  776.         ResFiles=self.GetAlphaBMPFiles()
  777.         file.write('__load_bar.Increment("AlphaBMPs")\n')
  778.         self.SaveList('GameStateAux.LoadAlphaBMPs(%s)\n',ResFiles,file)
  779.         file.write('__load_bar.Increment()\n')
  780.  
  781.         load_bar.Increment("Sounds")
  782.         file.write('__load_bar.Increment("Sounds")\n')
  783.         file.write('if InNewMap:\n')
  784.         file.write('  Bladex.LoadSoundDataBase("%s/Sounds.sdb")\n'%(aux_dir,))
  785.         Bladex.SaveSoundDataBase('%s/Sounds.sdb'%(aux_dir,))
  786.  
  787.         file.write('__load_bar.Increment("AutoBODs")\n')
  788.         file.write('BBLib.LoadAutoBODData("%s/AutoBOD.dat")\n\n\n'%(aux_dir,))
  789.  
  790.         load_bar.Increment("BODInspector")
  791.         file.write('Bladex.BodInspector()\n')
  792. ##        self.SaveParticleSystems(file)
  793.         psys_data_file=aux_dir+'/psys_data.dat'
  794.         load_bar.Increment("ParticleSystem")
  795.         Bladex.SaveParticleSystemsData(psys_data_file)
  796.         file.write('__load_bar.Increment("Particle Systems")\n')
  797.         file.write('Bladex.LoadParticleSystemsData("%s")\n'%(psys_data_file,))
  798.         file.write('__load_bar.Increment("ObjStore")\n')
  799.  
  800.  
  801. ##        file.write('Bladex.SetTime(%f)\n'%(Bladex.GetTime(),))
  802.         self.SaveTimers(file)
  803.         file.write('if InNewMap:\n')
  804.         file.write('  Bladex.LoadWorld(\"%s")\n'%(Bladex.GetWorldFileName(),))
  805.         file.write('__load_bar.Increment()\n')
  806.  
  807.         file.write('import ObjStore\n')
  808.         file.write('ObjStore.StoreIndex=%d\n'%(ObjStore.StoreIndex,))
  809.  
  810.         file.write('import BODInit\n')
  811.         file.write('BODInit.Init()\n\n')
  812.         file.write('__load_bar.Increment()\n')
  813.         file.write('import PickInit\n')
  814.         file.write('PickInit.Init()\n\n')
  815.         file.write('__load_bar.Increment("Pick")\n')
  816.  
  817.         file.write('if InNewMap:\n')
  818.         file.write('  __load_bar.Increment("SolidMask")\n')
  819.         file.write('  import SolidMask\n')
  820.         file.write('  SolidMask.Init()\n')
  821.         file.write('  __load_bar.Increment("Material")\n')
  822.         file.write('  import Material\n')
  823.         file.write('  Material.Init()\n')
  824. ## Esto deberia seguir en el if
  825.         file.write('__load_bar.Increment("AniSound")\n')
  826.         file.write('import AniSound\n')
  827.         file.write('__load_bar.Increment("anm_def")\n')
  828.         file.write('import anm_def\n')
  829.         file.write('anm_def.Init()\n')
  830.         file.write('__load_bar.Increment("StepSounds")\n')
  831.         file.write('import StepSounds\n')
  832.         file.write('StepSounds.Init()\n')
  833.         file.write('__load_bar.Increment("Enemies")\n')
  834.         file.write('import Enemies\n')
  835.         file.write('Enemies.Init()\n')
  836.         file.write('__load_bar.Increment("Biped")\n')
  837.         file.write('import Biped\n')
  838.         file.write('Biped.Init()\n')
  839.         file.write('__load_bar.Increment("anm_conv")\n')
  840.         file.write('import anm_conv\n')
  841.         file.write('anm_conv.Init()\n')
  842.         file.write('__load_bar.Increment("Anm_Mdf")\n')
  843.         file.write('import Anm_Mdf\n')
  844.         file.write('Anm_Mdf.Init()\n')
  845.  
  846.  
  847.         file.write('execfile("../../Scripts/AutoGenTextures.py")\n')
  848.         file.write('__load_bar.Increment()\n')
  849.  
  850.  
  851.  
  852.         file.write('try:\n')
  853.         file.write('  execfile("ActorsInit.py")\n')
  854.         file.write('except IOError:\n')
  855.         file.write('  print "Can╒┤ find ActorsInit.py"\n\n\n')
  856.  
  857.         combustion_data_file=aux_dir+'/combustion_data.dat'
  858.         load_bar.Increment("Combustion Data")
  859.         Bladex.SaveCombustionData(combustion_data_file)
  860.         file.write('print "About to load Combustion data"\n')
  861.         file.write('if InNewMap:\n')
  862.         file.write('  Bladex.LoadCombustionData("%s")\n'%(combustion_data_file,))
  863.         file.write('else:\n')
  864.         file.write('  Bladex.ReassignCombustionData()\n')
  865.         file.write('__load_bar.Increment()\n')
  866.  
  867.  
  868. ##        self.EntitiesState.SaveStatePass1(file,aux_dir)
  869.         ent_data_file=aux_dir+'/ent_data.dat'
  870.         load_bar.Increment("Entities Data")
  871.         Bladex.SaveEntitiesData(ent_data_file)
  872.         file.write('__load_bar.Increment("Entities")\n')
  873.         file.write('Bladex.LoadEntitiesData("%s")\n'%(ent_data_file,))
  874.         file.write('__load_bar.Increment()\n')
  875.  
  876.  
  877.         import os
  878.         import sys
  879.         file.write('import sys\n')
  880.         file.write('import os\n')
  881.         str_path=os.getcwd()
  882.         adj_str_path=string.replace(str_path,"\\\\","/")
  883.         adj_str_path=string.replace(adj_str_path,"\\","/")
  884.         file.write('sys.path.append("%s")\n\n'%(adj_str_path,))
  885.  
  886.  
  887.         file.write('__load_bar.Increment("DefFuncs")\n')
  888.         file.write('try:\n')
  889.         file.write('  execfile("DefFuncs.py")\n')
  890.         file.write('except IOError:\n')
  891.         file.write('  print "Can┤t find DefFuncs.py"\n\n\n')
  892.         file.write('__load_bar.Increment()\n')
  893.  
  894.         file.write('try:\n')
  895.         file.write('  char=Bladex.GetEntity("Player1")\n')
  896.         file.write('  execfile("MusicEvents.py")\n')
  897.         file.write('except IOError:\n')
  898.         file.write('  print "Can╒┤ find MusicEvents.py"\n\n\n')
  899.         file.write('__load_bar.Increment()\n')
  900.  
  901.  
  902.         file.write('__load_bar.Increment("MusDB")\n')
  903.         file.write('Bladex.LoadMusicState("%s/MusState.sdb")\n'%(aux_dir,))
  904.         load_bar.Increment("MusicState")
  905.         Bladex.SaveMusicState('%s/MusState.sdb'%(aux_dir,))
  906.  
  907.  
  908.         file.write('try:\n')
  909.         file.write('  execfile("TextureMaterials.py")\n')
  910.         file.write('except IOError:\n')
  911.         file.write('  print "Can╒┤ find TextureMaterials.py"\n\n\n')
  912.         file.write('__load_bar.Increment()\n')
  913.  
  914.         # Grabar las variables, funciones, ...
  915.         file.write( '\n')
  916.         file.write('GameStateAux.InitGameState("%s")\n\n'%(aux_dir,))
  917.         file.write('__load_bar.Increment()\n')
  918.  
  919.         file.write('__load_bar.Increment("Modules")\n')
  920.         load_bar.Increment("Modules")
  921.         self.SaveModules(file)
  922.         file.write('__load_bar.Increment("Vars")\n')
  923.         load_bar.Increment("Variables")
  924.         self.SaveVars(file)
  925.         file.write('__load_bar.Increment("Sounds")\n')
  926.         load_bar.Increment("Sounds")
  927.         self.SaveSounds(file)
  928.         file.write('__load_bar.Increment("Sectors")\n')
  929.         load_bar.Increment("Sectors")
  930.         self.SaveSectors(file)
  931.         file.write('__load_bar.Increment("Entities")\n')
  932.         load_bar.Increment("Entities")
  933.         self.SaveEntities(file)
  934.         file.write('__load_bar.Increment("PickledObjects")\n')
  935.         load_bar.Increment("PickledObjects")
  936.         SavePickledObjects(file,aux_dir)
  937.         file.write('__load_bar.Increment("Python Objects")\n')
  938.  
  939.         load_bar.Increment("Python Objects")
  940.         self.SaveObjects(file,aux_dir)
  941.         file.write('__load_bar.Increment("MapState")\n')
  942.  
  943.  
  944.         load_bar.Increment("Map State")
  945.         self.MapState.SaveState(file,aux_dir)
  946.         file.write('__load_bar.Increment("TriggerState")\n')
  947.         load_bar.Increment("Triggers State")
  948.         self.TriggersState.GetState()
  949.         self.TriggersState.SaveState(file,aux_dir)
  950.         file.write('__load_bar.Increment("State pass2")\n')
  951.         load_bar.Increment("Entities State pass 2")
  952.         self.EntitiesState.SaveStatePass2(file,aux_dir)
  953.         file.write('__load_bar.Increment()\n')
  954.         file.write('print "About set objects relations"\n')
  955.         file.write('__load_bar.Increment("Scheduled functions")\n')
  956.  
  957.         load_bar.Increment("Comp Vars")
  958.         self.SaveCompVars(file,aux_dir)
  959.         file.write('__load_bar.Increment("Global comp vars")\n')
  960.  
  961.         load_bar.Increment("Scheduled Functions")
  962.         self.SaveScheduledFuncs(file)
  963.         file.write('__load_bar.Increment("AfterFrame functions")\n')
  964.         load_bar.Increment("After Frame Functions")
  965.         self.SaveAfterFrameFuncs(file)
  966.  
  967.         load_bar.Increment("Extra Data")
  968.         GameStateAux.SaveExtraDataAux(file,aux_dir)
  969.  
  970.         load_bar.Increment("Extra Modules")
  971.         self.SaveModulesToBeSaved(file,aux_dir,ModulesToBeSaved)
  972.  
  973.         load_bar.Increment("Cleaning up")
  974.         GameStateAux.EndGameState(aux_dir)
  975.  
  976.         file.write('\n')
  977.         file.write('Bladex.SetCombos("Player1",%s)'%(Bladex.GetCombos("Player1"),))
  978.         file.write('\n')
  979.         file.write('# Scorer Data init\n')
  980.         file.write('#\n')
  981.         file.write('import Scorer\n')
  982.         file.write('Scorer.ActivateScorer()\n\n')
  983.         file.write('Scorer.SetVisible(1)\n\n')
  984.         file.write('__load_bar.Increment()\n')
  985.         file.write('import CharStats\n')
  986.         file.write('__load_bar.Increment()\n')
  987.         file.write('import GameText\n')
  988.         file.write('GameText.SetLanguage("%s")\n'%(Language.Current))
  989.         file.write('import DefaultScorerData\n')
  990.         file.write('DefaultScorerData.Init()\n\n')
  991.         file.write('__load_bar.Increment()\n')
  992.  
  993.         file.write('# Inicio del personaje y sus marcadores\n')
  994.         file.write('char=Bladex.GetEntity("Player1")\n')
  995.         file.write('Scorer.SetLevelLimits(0,CharStats.GetCharExperienceCost(char.CharType,char.Level))\n')
  996.         file.write('Scorer.SetLevelBarValue(char.PartialLevel)\n')
  997.         file.write('#Scorer.SetLevelValue(char.Level)\n')
  998.         file.write('#\n')
  999.         file.write('# Controls ( keyboard,mouse...) stuff\n')
  1000.         file.write('#\n')
  1001.         file.write('execfile("../../Scripts/InputInit.py")\n')
  1002.         file.write('import acts\n')
  1003.         file.write('acts.InitBindings("Player1")\n')
  1004.         file.write('acts.SetNoConfigurableActions()\n')
  1005.         file.write('__load_bar.Increment()\n')
  1006.         file.write('try:\n')
  1007.         file.write('  execfile("../../Config/Control.py")\n')
  1008.         file.write('  print "BladeInit -> Executed Control.py"\n')
  1009.         file.write('except:\n')
  1010.         file.write('  execfile("../../Scripts/DefControl.py")\n')
  1011.         file.write('  print "BladeInit -> Executed DefControl.py"\n\n')
  1012.         file.write('__load_bar.Increment()\n')
  1013.         file.write('#\n')
  1014.         file.write('# Menu\n')
  1015.         file.write('#\n')
  1016.         file.write('#execfile("../../Scripts/Menu.py")\n')
  1017.         file.write('import Menu\n')
  1018.         file.write('Menu.InitMenuKeys()\n')
  1019.         file.write('__load_bar.Increment()\n')
  1020.         file.write('execfile("../../Scripts/Globals.py")\n')
  1021.  
  1022.         import GotoMapVars
  1023.         file.write('import GotoMapVars\n')
  1024.         file.write('GotoMapVars.Get2DMapValuesAux(%s)\n'%(str(GotoMapVars.Set2DMapValuesAux()),))
  1025.  
  1026.         import Reference
  1027.         file.write('Reference.PYTHON_DEBUG=%d\n'%(Reference.PYTHON_DEBUG,))
  1028.  
  1029.         file.write('if Reference.PYTHON_DEBUG >= 1:\n')
  1030.         file.write('############### DEBUG LEVEL ONE ###############\n')
  1031.         file.write('  execfile("..\\..\\Scripts\\DebugControl.py")\n')
  1032.  
  1033.         file.write('if Reference.PYTHON_DEBUG >= 2:\n')
  1034.         file.write('############### DEBUG LEVEL TWO ###############\n')
  1035.         file.write('  Bladex.SetCallCheck(3)\n')
  1036.         file.write('else:\n')
  1037.         file.write('  Bladex.SetCallCheck(0)\n')
  1038.  
  1039.         file.write('__load_bar.Increment("AnmCameras")\n')
  1040.         file.write('import AnmCameras\n')
  1041.         file.write('AnmCameras.Init()\n')
  1042.  
  1043.         file.write('Bladex.ResumeSoundSystem()\n')
  1044.  
  1045.         file.write('Bladex.DoneLoadGame()\n')
  1046.         file.write('GameStateAux.CleanLoadTemp()\n\n\n')
  1047.  
  1048.         file.write('try:\n')
  1049.         file.write('  execfile("Positions.py")\n')
  1050.         file.write('except IOError:\n')
  1051.         file.write('  print "Can╒┤ find Positions.py"\n\n\n')
  1052.         file.write('__load_bar.Clear()\n')
  1053.         file.write('del __load_bar\n')
  1054.         file.write('Bladex.SetTime(%f)\n'%(Bladex.GetTime(),))
  1055.  
  1056.         file.write('#   Good Bye! (Enjoy The Silence)\n')
  1057.  
  1058.         file.close()
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.     def SaveCompVars(self,file,aux_dir):
  1065.         globs=GetGlobals()
  1066.         globs_dict={}
  1067.  
  1068.         global_vars=self.GetGlobalsAux(types.DictionaryType,globs)
  1069.         for i in global_vars:
  1070.             globs_dict[str(i[0])]=i[1]
  1071.  
  1072.         global_vars=self.GetGlobalsAux(types.ListType,globs)
  1073.         for i in global_vars:
  1074.             globs_dict[str(i[0])]=i[1]
  1075.  
  1076.         global_vars=self.GetGlobalsAux(types.TupleType,globs)
  1077.         for i in global_vars:
  1078.             globs_dict[str(i[0])]=i[1]
  1079.  
  1080.         filename="%s/%s.dat"%(aux_dir,"Globs")
  1081.         globfile=open(filename,"wt")
  1082.         p=cPickle.Pickler(globfile)
  1083.         p.dump(globs_dict)
  1084.         globfile.close()
  1085.         file.write("GameStateAux.LoadGlobalCompVars('%s',globals())\n"%(filename,))
  1086.  
  1087.  
  1088.  
  1089.     def SaveVars(self,file):
  1090.         "Saves variables in the global scope."
  1091.         globs=GetGlobals()
  1092.  
  1093.         global_vars=self.GetGlobalsAux(types.IntType,globs)
  1094.         file.write('\n# Integer variables\n')
  1095.         for i in global_vars:
  1096.             file.write('%s=%s\n'%(str(i[0]),str(i[1])))
  1097.  
  1098.         global_vars=self.GetGlobalsAux(types.FloatType,globs)
  1099.         file.write('\n# Float variables\n')
  1100.         for i in global_vars:
  1101.             file.write('%s=%s\n'%(str(i[0]),str(i[1])))
  1102.  
  1103.         global_vars=self.GetGlobalsAux(types.StringType,globs)
  1104.         file.write('\n# String variables\n')
  1105.         for i in global_vars:
  1106.             if str(i[0])!="__doc__":
  1107.                 file.write('%s="%s"\n'%(str(i[0]),str(i[1])))
  1108.  
  1109.  
  1110.     def SaveSounds(self,file):
  1111.         "Saves sound objects in the global scope."
  1112.  
  1113.         gmadlig=Bladex.CreateSound('../../sounds/golpe_maderamed.wav', 'GolpeMaderaMediana')
  1114.         snd_vars=self.GetGlobalsAux(type(gmadlig))
  1115.  
  1116.         file.write('\n# Sound objects\n')
  1117.         snd_vars_names=[]
  1118.         for i in snd_vars:
  1119.             snd_vars_names.append((str(i[0]),i[1].Name))
  1120.  
  1121.         for i in snd_vars_names:
  1122.             file.write('%s=Bladex.GetSound("%s")\n'%(i[0],i[1]))
  1123.  
  1124.  
  1125.     def SaveEntities(self,file):
  1126.         "Saves entity objects in the global scope."
  1127.  
  1128.         ent=Bladex.GetEntity(0)
  1129.         ent_vars=self.GetGlobalsAux(type(ent))
  1130.  
  1131.         file.write('\n# Entity objects\n')
  1132.         ent_vars_names=[]
  1133.         for i in ent_vars:
  1134.             try:
  1135.                 ent_vars_names.append((str(i[0]),i[1].Name))
  1136.             except AttributeError: #Puede haber entidades que ya no existan
  1137.                 pass
  1138.  
  1139.         for i in ent_vars_names:
  1140.             file.write('%s=Bladex.GetEntity("%s")\n'%(i[0],i[1]))
  1141.         file.write('\n\n')
  1142.  
  1143.     def SaveObjects(self,file,aux_dir):
  1144.         "Saves objects (from Lib/Object.py) in the global scope."
  1145.  
  1146.         import Objects
  1147.         obj=Objects.DinObj()
  1148.         obj_vars=self.GetGlobalsAux(type(obj))
  1149.  
  1150.         file.write('\n# Object objects\n')
  1151.         obj_vars_names=[]
  1152.         omit_objs=["__main__.Flecha","state","InputManager"]
  1153.         for i in obj_vars:
  1154.             print i
  1155.             if i is not self and str(i[1].__class__):
  1156.                 if (str(i[0]) not in omit_objs):
  1157.                     obj_vars_names.append((str(i[0]),i[1]))
  1158. ##                print "WorldState.SaveObjects() Added"
  1159.                 else:
  1160.                     print "Omited",str(i[0])
  1161.  
  1162.         for i in obj_vars_names:
  1163.             try:
  1164.                 SavePickDataAux(file,aux_dir,i[1],i[0]+"=%s\n")
  1165.             except Exception,exc:
  1166.                 print "Failed saving of",i
  1167.                 print exc
  1168.  
  1169.         file.write('\n\n')
  1170.  
  1171.  
  1172.     def SaveSectors(self,file):
  1173.         "Saves sector objects in the global scope."
  1174.  
  1175.         sec=Bladex.GetSector(0)
  1176.         sec_vars=self.GetGlobalsAux(type(sec))
  1177.  
  1178.         file.write('\n\n# Sector objects\n')
  1179.         sec_vars_names=[]
  1180.         for i in sec_vars:
  1181.             sec_vars_names.append((str(i[0]),i[1].Index))
  1182.  
  1183.         for i in sec_vars_names:
  1184.             file.write('%s=Bladex.GetSector(%d)\n'%(i[0],i[1]))
  1185.         file.write('\n\n')
  1186.  
  1187.  
  1188.     def SaveModulesToBeSaved(self,file,aux_dir,ModulesToBeSaved):
  1189.         for i in ModulesToBeSaved:
  1190.             filename="%s/%sData.dat"%(aux_dir,i.__name__)
  1191.             file.write('__load_bar.Increment("Module")\n')
  1192.             i.SaveData(filename)
  1193.             file.write('import %s\n'%(i.__name__,))
  1194.             file.write('%s.LoadData("%s")\n\n'%(i.__name__,filename,))
  1195.  
  1196.  
  1197.  
  1198.     def SaveScheduledFuncs(self,file):
  1199.  
  1200.         exclude_funcs=("PowWidgetDraw","PeriodicAutoSelectPlayer1","PlayerRestoreEnergy",
  1201.                        "RepeatPeriodicSound","NextText","ClearText","PeriodicSound::PlayPeriodic")
  1202.  
  1203.         n_sched_funcs=Bladex.GetnScheduledFuncs()
  1204.         print "SaveScheduledFuncs(). There are ",n_sched_funcs,"functions."
  1205.         for i in range(n_sched_funcs):
  1206.             f=Bladex.GetScheduledFunc(i)
  1207.             if f[2] not in exclude_funcs:
  1208.                 func_string='GameStateAux.LoadFunctionAux(%s)'%(GameStateAux.SaveFunctionAux(f[0]),)
  1209.                 filename=GetPickFileName(f[1])
  1210.                 func_parms='GameStateAux.GetPickledData("%s")'%(filename,)
  1211.                 print "SaveScheduledFuncs() ",filename,f[1],f[2]
  1212.                 GameStateAux.SavePickData(filename,f[1])
  1213.                 file.write("Bladex.AddScheduledFunc(%d,%s,%s,'%s')\n"%(f[3],func_string,func_parms,f[2]))
  1214.  
  1215.  
  1216.     def SaveAfterFrameFuncs(self,file):
  1217.  
  1218.         exclude_funcs=('InterpinterpLevelBar','InterpinterpStrengthBar','InterpinterpEnergyBar',
  1219.                        'InterpShields','InterpFadeText','InterpWeapons','InterpObjects','DefaultSelectionData',
  1220.                        'Fade')
  1221.  
  1222.         n_afrm_funcs=Bladex.GetnAfterFrameFuncs()
  1223.         print "SaveAfterFrameFuncs(). There are ",n_afrm_funcs,"functions."
  1224.         for i in range(n_afrm_funcs):
  1225.             f_name=Bladex.GetAfterFrameFuncName(i)
  1226.             if f_name not in exclude_funcs:
  1227.                 f=Bladex.GetAfterFrameFunc(f_name)
  1228.                 filename=GetPickFileName(f)
  1229.                 func_string='GameStateAux.GetPickledData("%s")'%(filename,)
  1230.                 GameStateAux.SavePickData(filename,f)
  1231.                 print "SaveAfterFrameFuncs() ",filename,f,f_name,func_string
  1232.                 file.write("Bladex.SetAfterFrameFunc('%s',%s)\n"%(f_name,func_string))
  1233.  
  1234.     def SaveModules(self,file):
  1235.         "Saves modules in the global scope."
  1236.  
  1237.         import string
  1238.         OmitModules=["__builtins__","Scorer","Menu","GameText","GameState","GameStateAux"]
  1239.         global_mods=self.GetGlobalsAux(types.ModuleType)
  1240.         file.write('\n# Modules\n')
  1241.         for i in global_mods:
  1242.             if i[0] not in OmitModules and string.find(i[0],"AnimationSet")==-1 and string.find(i[0],"Widget")==-1:
  1243.                 file.write('import %s\n'%(i[0],))
  1244.  
  1245.  
  1246.     def GetGlobalsAux(self,req_type,globs=None):
  1247.         g=None
  1248.         if globs:
  1249.             g=globs
  1250.         else:
  1251.             g=GetGlobals()
  1252.  
  1253.         elems=[]
  1254.         for i in g.items():
  1255.             if type(i[1])==req_type:
  1256.                 elems.append(i)
  1257.         return elems
  1258.  
  1259.  
  1260.  
  1261.  
  1262.     def SaveAutoBODs(self,path):
  1263.         # Primero voy a guardar los BODs que se generan automßticamente
  1264. ##        B_CID_AUTO_OBJDSCR=BBLib.B_CID_AUTO_OBJDSCR
  1265. ##        RM=BBLib.GetResourceManager()
  1266. ##        nAutoBODs=RM.NResources(B_CID_AUTO_OBJDSCR)
  1267. ##        for i in range(nAutoBODs):
  1268. ##            name="%s/%s.BOD"%(path,RM.GetResourceName(B_CID_AUTO_OBJDSCR,i))
  1269. ##            RM.SaveResource(B_CID_AUTO_OBJDSCR,i,name)
  1270.         name="%s/AutoBOD.dat"%(path,)
  1271.         BBLib.SaveAutoBODData(name)
  1272.  
  1273.     def SaveList(self,command,lista,file):
  1274.         nchunks=len(lista)/5
  1275.         for i in range(nchunks):
  1276.             lolimit=5*i
  1277.             l=lista[lolimit:lolimit+5]
  1278.             file.write(command%(str(l),))
  1279.  
  1280.     def __AuxGetResFiles(self,kind):
  1281.         RM=BBLib.GetResourceManager()
  1282.         nRes=RM.NResources(kind)
  1283.         ResFiles=[]
  1284.         for i in range(nRes):
  1285.             res_file=RM.GetResourceFile(kind,i)
  1286.             if res_file not in ResFiles:
  1287.                 ResFiles.append(res_file)
  1288.         return ResFiles
  1289.  
  1290.     def __AuxGetResFilesAndNames(self,kind):
  1291.         RM=BBLib.GetResourceManager()
  1292.         nRes=RM.NResources(kind)
  1293.         ResFiles=[]
  1294.         for i in range(nRes):
  1295.             res_file=RM.GetResourceFile(kind,i)
  1296.             res_name=RM.GetResourceName(kind,i)
  1297.             if res_file not in ResFiles:
  1298.                 ResFiles.append((res_file,res_name))
  1299.         return ResFiles
  1300.  
  1301.  
  1302.  
  1303.   
  1304.     def SaveTimers(self,file):
  1305.  
  1306.         file.write('\n# Timers\n')
  1307.         nTimers=Bladex.GetnTimers()
  1308.         for i in range(nTimers):
  1309.             cTimer=Bladex.GetTimerInfo(i)
  1310.             file.write('Bladex.CreateTimer("%s",%f)\n\n'%(cTimer[0],cTimer[1]))
  1311.         file.write('\n')
  1312.  
  1313.  
  1314.     def GetMMPFiles(self):
  1315.         return self.__AuxGetResFiles(BBLib.B_CID_BITMAP)
  1316.  
  1317.     def GetBODFiles(self):
  1318.         return self.__AuxGetResFiles(BBLib.B_CID_OBJDSCR)
  1319.  
  1320.     def GetBMPFiles(self):
  1321.         return self.__AuxGetResFilesAndNames(BBLib.B_CID_BMP)
  1322.  
  1323.     def GetAlphaBMPFiles(self):
  1324.         return self.__AuxGetResFilesAndNames(BBLib.B_CID_ALPHABMP)
  1325.  
  1326.  
  1327. def GetGlobals():
  1328.     import sys
  1329.     try:
  1330.         1 + ''
  1331.     except:
  1332.         frame = sys.exc_info()[2].tb_frame.f_back
  1333.  
  1334.     while frame:
  1335.         globs=frame.f_globals
  1336.         frame=frame.f_back
  1337.  
  1338.     return globs
  1339.